# -*-coding: Utf-8 -*-
# @File : student_interface .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time：2024/5/7
from lib import Tools
from db import Student


class StudentInterface(object):
    def __init__(self):
        self.tools = Tools()

    def select_course_interface(self, username, course_obj):
        # 【一】校验当前课程是否存在
        if not course_obj:
            self.tools.log_info(tag='warning', role="Student", username=username,
                                info=f'选择课程失败!原因是不存在当前编号对应的课程!')
            return False
        # 【二】校验当前课程是否有学校开设
        if not hasattr(course_obj, 'school'):
            course_obj.school = None
        if not course_obj.school:
            self.tools.log_info(tag='warning', role="Student", username=username,
                                info=f'选择课程失败!原因当前课程无学校开设!')
            return False
        # 【三】课程存在并且有学校开设
        # 【1】获取到当前学生对象
        flag, student_obj = Student.select(name=username)
        # 【2】判断当前课程对象是否具有学生列表
        if not hasattr(course_obj, 'student_list'):
            course_obj.student_list = []
        # 【3】判断当前学生是否已经选过该课程
        if student_obj.name in course_obj.student_list:
            self.tools.log_info(tag='warning', role="Student", username=username,
                                info=f'选择课程失败!原因当前课程已经选过，不允许复选!')
            return False
        # 【4】当前学生没有此课程则添加到学生课程中
        student_obj.course[course_obj.name] = 0
        # 【5】将当前学生添加到当前课程列表下
        course_obj.student_list.append(student_obj.name)
        # 【6】保存课程数据和学生数据
        course_obj.save()
        student_obj.save()
        # 【四】记录日志
        self.tools.log_info(tag='info', role="Student", username=username,
                            info=f'选择课程 {course_obj.name} 成功!')
        return True

    def check_score_interface(self, username):
        # 【一】获取到当前学生对象
        student_obj = Student.select(name=username)
        # 【二】调用学生对象的展示分数方法
        flag, msg = student_obj.show_data_info()
        if not flag:
            self.tools.log_info(tag='warning', role="Student", username=username,
                                info=f'查看课程失败!原因{msg}!')
            return False
        # 【三】记录日志
        self.tools.log_info(tag='info', role="Student", username=username,
                            info=f'查看已选课程信息成功!')
        return True
